class TestArray {

    public static void main(String[] args) {
//        define()
//        get()
//        add()
//        remove()

//        iter()

    }

    private static void iter() {
        def list = [2, 1, 8, -9, 6, 3, 5, 0]

        //不带有角标的遍历，类似于 java 中的 foreach
        list.each { println it + "  " }//2  1  8  -9  6  3  5  0

        //带有角标的遍历，类似于普通的for循环
        list.eachWithIndex { int value, int index ->
            println "value is ${value} and index is ${index}"
        }
    }

    private static void remove() {
        def list = [2, 1, 8, -9, 6, 3, 5, 0]
        //移除的是角标为2的元素
        list.remove(2)
        println list
        //移除元素为2
        list.remove((Object) 2)
        println list
        list.removeLast()
        println list
    }

    private static void add() {
        //在列表集合中添加元素的方式有以下三种
        //list.add()
        //leftShift
        //<<
        def list5 = [1, 2, 3, 4, 5]
        list5.add("100")
        list5.leftShift 200
        //括号是可以省略的
        list5.leftShift(true)
        //leftshift可以使用操作符<<表示
        list5 << 2.4f
        println list5
    }

    private static void get() {
        /**获取单个元素*/
        // 0 就是第一个位置的元素,-1就是最后一个位置的元素，一次类推即可。
        def list5 = [1, 2, 3, 4, 5]
        println 2 == list5[1]
        println 5 == list5[-1]

        /**获取多个元素*/
        //list[index1,index2,indexn]获取指定位置的元素，如果角标不存在，那么对应的值就返回null
        println list5[1, 3, 0].toListString()//[2, 4, 1]

        println list5[1, 9].toListString()//[2, null]

        // list[index1..index2]取出指定范围的元素
        def list6 = [1, 2, 3, 4, 5]
        //取出指定范围的元素集合
        println list6[1..3].toListString()//[2, 3,4]
    }

    private static void define() {
        //定义一个集合
        //1. 在 Groovy 中定义的集合默认就是对应于 Java 中 ArrayList 集合
        def list = [1, 2, 3]
        println list.class//class java.util.ArrayList

        println list instanceof List

        //2. 在集合中可以介绍任意类型的数据,例如当前传入的是数字,字符串,boolean值
        def list2 = [1, "groovy", true]
        println list2

        //3. 指定集合的类型有两种方式
        //方式1 通过 as 操作符来指定
        //方式2 通过强类型定义的方式来指定

        def list3 = [1, 2, 3] as LinkedList
        println list3.class//class java.util.LinkedList

        LinkedList list4 = [4, 5, 6]
        println list4.class//class java.util.LinkedList
    }
}
